CREATE OR REPLACE PACKAGE BODY PKG_ITENS_COLECAO AS
ERR_MSG VARCHAR2(100);
ERR_NUM NUMBER;

    PROCEDURE PROC_INS_ITEM_COLECAO(
        P_NOME_ITEM             COLECAO.ITEM.NOME%TYPE,
        P_DESCR_ITEM            COLECAO.ITEM.DESCRICAO%TYPE,
        P_MARCA_ITEM            COLECAO.MARCA.NOME_MARCA%TYPE,
        P_FABRICANTE             COLECAO.FABRICANTE.NOME_FABRICANTE%TYPE,
       -- P_ANO_FABRICACAO    COLECAO.ITEM.ANO_FABRICACAO%TYPE
       P_ANO_FABRICACAO    VARCHAR2
        

    ) IS
    V_ID_FABRICANTE          COLECAO.FABRICANTE.ID_FABRICANTE%TYPE;
    V_ID_MARCA                  COLECAO.MARCA.ID_MARCA%TYPE;
    -- V_DATE                          COLECAO.ITEM.ANO_FABRICACAO%TYPE;
    V_DATE                          VARCHAR2(100);   
    V_ID_TIPO                      COLECAO.TIPO.ID_TIPO%TYPE;
    V_ID_ITEM                      COLECAO.ITEM.ID_ITEM%TYPE;
    V_ERROR_ID                  COLECAO.ERROR.ERROR_ID%TYPE;


    BEGIN 
     DBMS_OUTPUT.PUT_LINE('BEGIN: ');
         V_DATE:=TO_DATE(P_ANO_FABRICACAO,'DD-MM-YYYY');
         DBMS_OUTPUT.PUT_LINE('V_DATE: ' || V_DATE);
         v_ID_TIPO:=1; -- TO BE CHANGED
        
        DBMS_OUTPUT.PUT_LINE('v_ID_TIPO: ' || v_ID_TIPO);
        
        SELECT ID_FABRICANTE 
        INTO V_ID_FABRICANTE
        FROM COLECAO.FABRICANTE
        WHERE UPPER(NOME_FABRICANTE) LIKE UPPER('%'||P_FABRICANTE||'%');

        DBMS_OUTPUT.PUT_LINE('V_ID_FABRICANTE: ' || V_ID_FABRICANTE);

        SELECT ID_MARCA 
        INTO V_ID_MARCA
        FROM COLECAO.MARCA
        WHERE UPPER(NOME_MARCA) LIKE UPPER('%'||P_MARCA_ITEM||'%');
        
        DBMS_OUTPUT.PUT_LINE('V_ID_MARCA: ' || V_ID_MARCA);
        
        -- GRAB SEQUENCE
        SELECT SEQ_ITEM.NEXTVAL
        INTO V_ID_ITEM
        FROM DUAL;
        
        DBMS_OUTPUT.PUT_LINE('V_ID_ITEM: ' || V_ID_ITEM);
        
        BEGIN
        
        DBMS_OUTPUT.PUT_LINE('V_ID_TIPO: ' || V_ID_TIPO);
        DBMS_OUTPUT.PUT_LINE('V_ID_FABRICANTE: ' || V_ID_FABRICANTE);
        DBMS_OUTPUT.PUT_LINE('V_ID_MARCA: ' || V_ID_MARCA);
        DBMS_OUTPUT.PUT_LINE('P_NOME_ITEM: ' || P_NOME_ITEM);
        DBMS_OUTPUT.PUT_LINE('P_DESCR_ITEM: ' || P_DESCR_ITEM);
        DBMS_OUTPUT.PUT_LINE('V_DATE: ' || V_DATE);
            
            INSERT INTO COLECAO.ITEM (ID_ITEM,ID_TIPO, ID_FABRICANTE, ID_MARCA, NOME, DESCRICAO, ANO_FABRICACAO) 
            VALUES (V_ID_ITEM,V_ID_TIPO,V_ID_FABRICANTE,V_ID_MARCA,P_NOME_ITEM,P_DESCR_ITEM,V_DATE);
            
            DBMS_OUTPUT.PUT_LINE('INSERT ');
            
            COMMIT;
         EXCEPTION
            WHEN OTHERS THEN
                ROLLBACK;
                ERR_NUM:=SQLCODE;
                ERR_MSG:= SUBSTR(SQLERRM,1,100);
                DBMS_OUTPUT.PUT_LINE('ERR_NUM: '||ERR_NUM);
                DBMS_OUTPUT.PUT_LINE('ERR_MSG: '||ERR_MSG);
                
                SELECT SEQ_ERROR.NEXTVAL
                INTO V_ERROR_ID 
                FROM DUAL;
                
                INSERT INTO COLECAO.ERROR (ERROR_ID, ERROR_DATE, ERROR_MSG)
                VALUES
                (V_ERROR_ID, SYSDATE, ERR_MSG || ' ' ||ERR_NUM);
               ---  (V_ERROR_ID, SYSDATE, ERR_MSG || ' ' ||ERR_NUM);
               COMMIT;
         END;
                        

    END;
    
    PROCEDURE PROC_DEL_ITEM_COLECAO(
    P_ID_ITEM             COLECAO.ITEM.ID_ITEM%TYPE
    ) IS
    
    V_ERROR_ID                  COLECAO.ERROR.ERROR_ID%TYPE;
    BEGIN
        DELETE FROM COLECAO.ITEM WHERE ID_ITEM= P_ID_ITEM;
        COMMIT;
        EXCEPTION
            WHEN OTHERS THEN
            BEGIN
                ROLLBACK;
                    ERR_NUM:=SQLCODE;
                    ERR_MSG:= SUBSTR(SQLERRM,1,100);
                    
                    DBMS_OUTPUT.PUT_LINE('ERR_NUM: '||ERR_NUM);
                    DBMS_OUTPUT.PUT_LINE('ERR_MSG: '||ERR_MSG);
                    
                    SELECT SEQ_ERROR.NEXTVAL
                    INTO V_ERROR_ID 
                    FROM DUAL;
                    
                    INSERT INTO COLECAO.ERROR (ERROR_ID, ERROR_DATE, ERROR_MSG)
                    VALUES
                    (V_ERROR_ID, SYSDATE, ERR_MSG || ' ' ||ERR_NUM);
            END;
        
    END;

END; 